package com.wsc.personalblog.service.impl;


import com.wsc.personalblog.entity.ArticleTag;
import com.wsc.personalblog.entity.ArticleTagExample;
import com.wsc.personalblog.entity.Tag;
import com.wsc.personalblog.mapper.ArticleTagMapper;
import com.wsc.personalblog.mapper.TagMapper;
import com.wsc.personalblog.service.TagService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Service
public class TagServiceImpl implements TagService {

    @Autowired
    private TagMapper tagMapper;

    @Autowired
    private ArticleTagMapper articleTagMapper;

    /**
     * 查询全部的标签信息
     * @return
     */
    @Override
    public List<Tag> getTagInfo() {
        List<Tag> tagList = tagMapper.selectByExample(null);
        return tagList;
    }

    /**
     * 添加标签信息
     * @param tag 标签信息对象
     * @return
     */
    public void addTag(Tag tag) {
        String name = tag.getName();
        if(name == null || name.trim().length() == 0)
            throw new RuntimeException("请输入正确的标签名称");
        tag.setCreateData(LocalDateTime.now());
        tagMapper.insertSelective(tag);
    }

    /**
     * 更新标签描述信息
     * @param tag 标签信息对象
     * @return
     */
    @Override
    public void updateTagDescription(Tag tag) {
        String description = tag.getDescription();
        if(description == null || description.trim().length() == 0)
            throw new RuntimeException("请输入正确的描述信息");
        tagMapper.updateByPrimaryKeySelective(tag);
    }

    /**
     * 删除标签信息
     * @param tagId 标签信息id
     * @return
     */
    @Override
    public void deleteTag(Integer tagId) {
        // 1. 需要先判断有无跟该标签关联的文章，如果有则不能删除
        ArticleTagExample articleTagExample = new ArticleTagExample();
        ArticleTagExample.Criteria criteria = articleTagExample.createCriteria();
        criteria.andTagIdEqualTo(tagId);
        // 查询跟该标签相关的信息
        List<ArticleTag> articleTags = articleTagMapper.selectByExample(articleTagExample);
        if(!(articleTags == null || articleTags.size() == 0)){
            /**
             * 后续如果有需要可以在这里返回文章信息
             */
            throw new RuntimeException("当前标签已被部分文章使用，无法删除");
        }
        // 2. 删除标签信息
        tagMapper.deleteByPrimaryKey(tagId);
    }
}
